package com.kvn.btrace._02probeMapExpand;

import java.util.List;

import com.google.common.collect.Lists;
import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.attach.VirtualMachineDescriptor;

/**
 * 根据 btrace.bat 的命令脚本，将其改造成编程式的 brace 脚本来执行，用起来更爽。
 * @author wzy
 * @date 2017年9月22日 上午11:55:35
 */
public class ProgrammaticBTrace {
	private static final String BTRACE_HOME = "D:\btrace-bin-1.3.9";
	private static final String BTRACE_SCRIPT = "E:\\gitWorkspace\\btracedemo\\src\\com\\kvn\\btrace\\_02probeMapExpand\\ExpandCapacityBtrace.java";

	public static void main(String[] args) throws Exception {
		// btrace.bat 脚本（java -D<名称>=<值> 设置系统属性）
		// -Dcom.sun.btrace.probeDescPath=.
		// -Dcom.sun.btrace.dumpClasses=false
		// -Dcom.sun.btrace.debug=false
		// -Dcom.sun.btrace.unsafe=false
		System.setProperty("com.sun.btrace.probeDescPath", ".");
		System.setProperty("com.sun.btrace.dumpClasses", "false");
		System.setProperty("com.sun.btrace.debug", "false"); // debug 开关
		System.setProperty("com.sun.btrace.unsafe", "false");
		com.sun.btrace.client.Main main = new com.sun.btrace.client.Main();
		List<String> bArgs = Lists.newArrayList();
		bArgs.add("-cp");
		bArgs.add(BTRACE_HOME + "/build/btrace-client.jar;%JAVA_HOME%/lib/tools.jar");
		
		
		List<VirtualMachineDescriptor> vms = VirtualMachine.list();
		String targetVM = "com.kvn.btrace._02probeMapExpand.ExpandCapacity";
		for (VirtualMachineDescriptor vmd: vms) {
		    if (vmd.displayName().equals(targetVM)) {
		    	bArgs.add(vmd.id()); // pid
		    }
		}
		bArgs.add(BTRACE_SCRIPT);
		
		main.main(bArgs.toArray(new String[]{}));
	}
}
